// 子弹脚本
cc.Class({
    extends: cc.Component,

    properties: {

        // 子弹速度会比我们的角色快，而且还快不少，所以基本上，都回是 有解的状态;
        // 子弹速度，速度比移动目标快发生相遇
        speed: 500,
        // 子弹目标
        target: {
            default: null,
            type: cc.Node,
        },
    },

    // onLoad () {},

    start () {
        this.is_runing = false;
        this.shoot_to_target(this.target);
    },

    // 发射子弹 射击
    shoot_to_target(target) {
        // step1, 根据当前自己的速度，来预估时间;
        let src = this.node.getPosition();
        let dst = this.target.getPosition();

        // 获取 向量的差
        // let dir = cc.pSub(dst, src);  //v1版本的,v2不用
        let vec = dst.sub(src);  //v2用

        // 获取 向量的长度
        // let len = cc.pLength(dir); //v1版本的,v2不用
        let len = vec.mag(); //v2用

        let t = len / this.speed;

        // 目标位置 ,获取enemy组件
        let enemy = this.target.getComponent("enemy");
        let e_vx = enemy.vx;
        let e_vy = enemy.vy;
        // 目标移动距离
        let offset_x = e_vx * t;
        let offset_y = e_vy * t;

        // 预估碰撞点
        dst.x += offset_x;
        dst.y += offset_y;

        // 反算子弹发射的角度、距离
        // dir = cc.pSub(dst, src); // v1
        dir = dst.sub(src);
        // len = cc.pLength(dir); // v1
        len = dir.mag();
        // 反算子弹速度
        let speed = len / t;
        this.vx = speed * dir.x / len;
        this.vy = speed * dir.y / len;

        this.is_runing = true;
    },

    update (dt) {
        if (this.is_runing) {
            // 更新子弹位置
            this.node.x += this.vx * dt;
            this.node.y += this.vy * dt;
        }
    },
});
